package AccionesSemanticas;

import Elementos.Doble;
import Elementos.Mensaje;
import Elementos.Token;
import Lexico.AnalizadorLexico;
import Lexico.EntradaTS;

public class AccS5 extends AccionSemantica {
	
	public AccS5(AnalizadorLexico al) {
		super(al);
	}
	
	@Override
	public int ejecutar(String actual, String leido) {
		Doble cte= new Doble(actual, "Constante");
		Token devolver= new Token(new Integer(0));
		if(cte.estaEnRango()){
			EntradaTS nuevo= new EntradaTS(cte,this.aLexico.getLineaActual(), "double");
			int pos= this.aLexico.getTablaSimbolos().existeSimboloID(nuevo);			
			if (pos==0){                                                         //no esta en tabla, lo inserta
				pos= this.aLexico.getTablaSimbolos().insertSimbolo(nuevo);
				devolver= new Token("double", pos, Token.CTEDOBLE);			
			}
			else                                                                 //devuelve el que esta en la tabla
				devolver= new Token("double", pos, Token.CTEDOBLE);		
			this.aLexico.setTokenActual(devolver);
		}
		else{
			Mensaje m= new Mensaje(Mensaje.ERROR, "Constante fuera de rango. Linea: ", this.aLexico.getLineaActual());
			this.aLexico.addMensaje(m);
			devolver= new Token("double", 0, Token.CTEFUERADERANGO);			
		}
		this.aLexico.setTokenActual(devolver);
		return -1;
	}	
}
